﻿&НаСервереБезКонтекста
Функция ПолучитьПоследнееВходящееПисьмо()
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	ВходящиеПисьма.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.ВходящиеПисьма КАК ВходящиеПисьма
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
		|			МАКСИМУМ(ВходящиеПисьма.Дата) КАК Дата
		|		ИЗ
		|			Справочник.ВходящиеПисьма КАК ВходящиеПисьма) КАК Т
		|		ПО ВходящиеПисьма.Дата = Т.Дата
		|
		|УПОРЯДОЧИТЬ ПО
		|	Ссылка";

	Результат = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = Результат.Выбрать();
	Если НЕ ВыборкаДетальныеЗаписи.Следующий() Тогда
		Возврат Справочники.ВходящиеПисьма.ПустаяСсылка();
	КонецЕсли;
	Возврат ВыборкаДетальныеЗаписи.Ссылка;
КонецФункции

&НаКлиенте
Процедура КомандаПолучитьПисьма(Команда)
	Количество = 0;
	Если Не РаботаСПочтойВызовСервера.ПолучитьПисьма(Количество, ИспользоватьIMAP, ПочтовыйЯщикIMAP) Тогда
		Кнопки = Новый СписокЗначений;
		Кнопки.Добавить(1, "Настроить почту");
		Кнопки.Добавить(2, "Закрыть");
		ОтветНаВопросОНастройкахИнтеренетПочты = ПолучитьОтветНаВопросОНастройкахИнтеренетПочты(
			НСтр("ru='Не указаны настройки интернет почты!'", "ru")
			, Кнопки
			, 1
		);
		Если ОтветНаВопросОНастройкахИнтеренетПочты = 1 Тогда
			ОткрытьФорму("ОбщаяФорма.НастройкаПочты");
		КонецЕсли;
		Возврат;
	КонецЕсли;
	Если Количество <> 0 Тогда
		Элементы.СписокВходящие.Обновить();
		ЭтаФорма.ОбновитьОтображениеДанных();
		Элементы.СписокВходящие.ТекущаяСтрока = ПолучитьПоследнееВходящееПисьмо();
		#Если Не ВебКлиент И Не МобильныйКлиент Тогда
			ПанельЗадачОС.УстановитьНаклейку(Количество, Истина);
			ПанельЗадачОС.Сигнализировать(3);
		#КонецЕсли
	КонецЕсли;
	#Если Не МобильныйКлиент Тогда
		ПоказатьОповещениеПользователя(
			СтрокаСЧислом(НСтр("ru="";%1 новое письмо;;%1 новых письма;%1 новых писем;%1 новых писем""", "ru"),
			Количество,
			ВидЧисловогоЗначения.Количественное,
			"L=ru"));
	#КонецЕсли
КонецПроцедуры

&НаКлиенте
Асинх Функция ПолучитьОтветНаВопросОНастройкахИнтеренетПочты(ТекстВопроса, КнопкиВопроса, КнопкаВопросаПоУмолчанию)
	ОтветНаВопросОНастройкахИнтеренетПочты = Ждать ВопросАсинх(ТекстВопроса, КнопкиВопроса,, КнопкаВопросаПоУмолчанию);
	Возврат ОтветНаВопросОНастройкахИнтеренетПочты;
КонецФункции

&НаКлиенте
Процедура КомандаНовоеПисьмо(Команда)
	ПараметрыФормы = Новый Структура();
	ОткрытьФорму("Справочник.ИсходящиеПисьма.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура КомандаНовоеПисьмоПоШаблону(Команда)
	ПараметрыФормы = Новый Структура("ПоШаблону", Истина);
	ОткрытьФорму("Справочник.ИсходящиеПисьма.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура КомандаОтветить(Команда)
	Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаВходящие Тогда
		Письмо = Элементы.СписокВходящие.ТекущаяСтрока;
	Иначе
		Письмо = Элементы.СписокИсходящие.ТекущаяСтрока;
	КонецЕсли;
	ПараметрыФормы = Новый Структура("ВходящееПисьмо", Письмо);
	ОткрытьФорму("Справочник.ИсходящиеПисьма.ФормаОбъекта",ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	Если ИмяСобытия = "ОбновитьСписокВходящихПисем" Тогда
		Элементы.СписокВходящие.Обновить();
	КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьПочтовыеЯщики()
	Возврат РаботаСПочтой.ПолучитьПочтовыеЯщикиIMAP();
КонецФункции

&НаСервере
Процедура ЗагрузитьПочтовыеЯщикиВСписокВыбора(ПолеВыбора)
	ПолеВыбора.СписокВыбора.Очистить();
	Попытка
		ПочтовыеЯщики = ПолучитьПочтовыеЯщики();
		Для Каждого ПочтовыйЯщик из ПочтовыеЯщики Цикл
			ПолеВыбора.СписокВыбора.Добавить(ПочтовыйЯщик);
		КонецЦикла;
	Исключение
		Сообщить("Ошибка при заполнении списка почтовых ящиков IMAP: " + ИнформацияОбОшибке().Описание); 
	КонецПопытки
КонецПроцедуры

&НаСервере
Процедура СоздатьПочтовыйЯщик(ПочтовыйЯщик)
	РаботаСПочтой.СоздатьПочтовыйЯщикIMAP(ПочтовыйЯщик);
	ЗагрузитьПочтовыеЯщикиВСписокВыбора(Элементы.ПочтовыйЯщикIMAP);
КонецПроцедуры

&НаКлиенте
Процедура КомандаСоздатьПочтовыйЯщикIMAP(Команда)
	СоздатьПочтовыйЯщикIMAP();
КонецПроцедуры

&НаКлиенте
Асинх Процедура СоздатьПочтовыйЯщикIMAP()
	ИмяПочтовогоЯщика = Ждать ВвестиСтрокуАсинх("<Новое Имя>", "Введите имя почтового ящика");
	Если Не ИмяПочтовогоЯщика = Неопределено Тогда
	    СоздатьПочтовыйЯщик(ИмяПочтовогоЯщика);
	    ПочтовыйЯщикIMAP = ИмяПочтовогоЯщика;
	    ФильтроватьСпискиПисем();		
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНастройки()
	Профиль = РаботаСПочтой.ПолучитьПрофиль(, ИспользоватьIMAP);
	Элементы.ПочтовыйЯщикIMAP.Доступность = ИспользоватьIMAP;
	Элементы.КомандаСоздатьПочтовыйЯщикIMAP.Доступность = ИспользоватьIMAP;
	ФильтроватьСпискиПисем();
КонецПроцедуры

&НаСервере
Процедура УстановитьОтборПоПочтовомуЯщику(Список)
	УдалитьОтборПоПочтовомуЯщику(Список);
	ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение    = Новый ПолеКомпоновкиДанных("ПочтовыйЯщик");
	ЭлементОтбора.ВидСравнения     = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.Использование    = Истина;
	ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
	Если ИспользоватьIMAP Тогда
		Если ПочтовыйЯщикIMAP = "" Тогда
			ПочтовыйЯщикIMAP = "INBOX";
		КонецЕсли;		
		ЭлементОтбора.ПравоеЗначение   = "IMAP/" + ПочтовыйЯщикIMAP;
	Иначе
		ЭлементОтбора.ПравоеЗначение   = "POP3";
	КонецЕсли;
	ПараметрыСеанса.ЯщикIMAP = ПочтовыйЯщикIMAP;
КонецПроцедуры

&НаСервере
Процедура УдалитьОтборПоПочтовомуЯщику(Список)
	ЭлементыОтбора = Список.Отбор.Элементы;
	ПолеКомпоновки = Новый ПолеКомпоновкиДанных("ПочтовыйЯщик");
	Для каждого ЭлементОтбора Из ЭлементыОтбора Цикл
		Если ЭлементОтбора.ЛевоеЗначение = ПолеКомпоновки Тогда
			ЭлементыОтбора.Удалить(ЭлементОтбора);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура ФильтроватьСпискиПисем()
    УстановитьОтборПоПочтовомуЯщику(СписокВходящие);
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ЗаполнитьНастройки();
	ЗагрузитьПочтовыеЯщикиВСписокВыбора(Элементы.ПочтовыйЯщикIMAP);
КонецПроцедуры

&НаКлиенте
Процедура КомандаНастройкаПочты(Команда)
	Оповещение = Новый ОписаниеОповещения(
		"КомандаНастройкаПочтыЗавершение", ЭтотОбъект);
	ОткрытьФорму("ОбщаяФорма.НастройкаПочты",,,,,, Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура КомандаНастройкаПочтыЗавершение(Результат, Параметры) Экспорт
	ЗаполнитьНастройки();
КонецПроцедуры

&НаКлиенте
Процедура ПочтовыйЯщикIMAPПриИзменении(Элемент)
	ФильтроватьСпискиПисем();
КонецПроцедуры